/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.examat.parser;

import java.io.File;
import java.util.Scanner;
import org.examat.parser.entidades.Pregunta;

/**
 *
 * @author Fer
 */
public class Main 
{

    /**
     * @param args Primer parametro: nombre del
     * archivo a parsear
     */
    public static void main(String[] args){
        String archivo[] = {
                            "dummy",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m01.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m02.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m02b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m03.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m03b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m04.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m04b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m05.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m05b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m06.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m06b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m07.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m07b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m08.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m08b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m09.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m09b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m10.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m10b.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m13.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m13_10.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m16.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m17.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m19.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m20.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m26.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m27.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m28.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m29.tex",
"C:\\Users\\Jorge\\Documents\\NetBeansProjects\\examat\\examat\\parser\\mate\\m30.tex"
                           };       
        
        
        // Matar a 25,24,23,22,21,18,15,14,12,11,01b
        // Correr para todas las preguntas
        for(int i = 1; i <= 30 ; i++){
            // Se pide que imprima las prguntas
            // run(archivo[i],seccion[i]);
            try{
            run(archivo[i], String.valueOf(i), "1");
            }
            catch(Exception e){
                System.out.println("----> No se pudo con el archivo:" + archivo[i]);
            }
        }
        
    }
    
    public static void mainAdmin(String[] args) {
        
        String archivo[] = {"dummy", "a01.tex", "a02.tex", "a03.tex", "a05.tex", "a06.tex", "a07.tex", "a08.tex", 
                            "a09.tex", "a10.tex", "a10.tex", "a13.tex", "a16.tex", "a17.tex", "a19.tex", "a20.tex",
                            "a01.tex", "a02.tex", "a03.tex", "a05.tex", "a06.tex", "a07.tex", "a08.tex", 
                            "a09.tex", "a10.tex", "a10.tex", "a13.tex", "a16.tex", "a17.tex", "a19.tex", "a20.tex",
                            "a01.tex", "a02.tex", "a03.tex", "a05.tex", "a06.tex", "a07.tex", "a08.tex", 
                            "a09.tex", "a10.tex", "a10.tex", "a13.tex", "a16.tex", "a17.tex", "a19.tex", "a20.tex"
                           };
        
        for(int i = 1; i <= 30 ; i++){
            // Se pide que imprima las prguntas
            // run(archivo[i],seccion[i]);
            run(archivo[i], String.valueOf(i),"0" );
        }
        
        
    }
    
    /**
     * 
     * @param arg1
     * Es el nombre del archivo
     * @param seccion
     * Es la sección que le corresponde, es decir,
     * el número de pregunta que se quiere aparezca en el examen
     * @param dificultad 
     * Es la dificultad del examen 0 para fácil y 1 para difícil
     */
    public static void run(String arg1, String seccion, String dificultad) {
        
        // Modificar para que imprima cosas diferentes
        boolean DEBUG = true;
        //DEBUG = false;
        
        if (arg1 == null) {
            System.err.println("Falta el nombre del archivo a parsear");
            System.exit(1);
        }
        //TODO: hacer q reemplace \newline por \r\n
        //TODO: quitar los SALTOS de linea principales

        File f = null;
        Scanner s = null;
        try {
            System.out.println("-- Abriendo archivo: " + arg1);
            f = new File(arg1);
            s = new Scanner(f);
            System.out.println("-- Hecho");
        } catch (Exception e) {
            System.err.println("-- No pude abrir el archivo");
            System.exit(1);
        }

        System.out.println("-- Quitando principio...");
        //quitamos el cuerpo
        String str;
        while (s.hasNextLine()) {
            str = s.nextLine();
            // System.out.println(str);
            if (str.contains("\\begin{document}") || str.equals("\\begin{document}")) {
                // System.out.println("Enconcrado \\begin");
                break;
            }
        }
        System.out.println("-- Hecho");

        System.out.println("-- Leyendo preguntas...");
        //leemos pregunta por pregunta
        s.useDelimiter("\\r\\n\\r\\n");
        int ini, fin;
        String preg, ora, ia, ib, ic, id;
        Pregunta p;

        //EntityManager em = Persistence.createEntityManagerFactory("examatParserPU").createEntityManager();
        
        int pp = 0;
        while (s.hasNext()) {
            preg = s.next();
            //sacamos la oracion
            //caso especial
            preg = preg.replace("(a)","( a )");
            ini = preg.indexOf("a)");
            if (ini >= 0) {
                ora = preg.substring(0, ini);
                //sacamos el inciso a;
                fin = preg.indexOf("b)");
                ia = preg.substring(ini + 2, fin); // para quitar el inciso
                //inciso b:
                ini = fin;
                fin = preg.indexOf("c)");
                ib = preg.substring(ini + 2, fin);
                //inciso c:
                ini = fin;
                fin = preg.indexOf("d)");
                ic = preg.substring(ini + 2, fin);
                //inciso d;
                ini = fin;
                id = preg.substring(ini + 2, preg.length());
                
                if(DEBUG){
                    //hay q hacer algo con esto -> Imprimirlos
                    System.out.println("PREGUNTA:");
                    System.out.println(parsea(ora));
                    System.out.println("INCISO a)");
                    System.out.println(parsea(ia));
                    System.out.println("INCISO b)");
                    System.out.println(parsea(ib));
                    System.out.println("INCISO c)");
                    System.out.println(parsea(ic));
                    System.out.println("INCISO d)");
                    System.out.println(parsea(id));
                    return;
                }
                else{
                    ora = (parsea(ora));
                    ia = (parsea(ia));
                    ib = (parsea(ib));
                    ic = (parsea(ic));
                    id = (parsea(id));

                    String cmdInsert = "INSERT INTO `examat`.`pregunta` (`Enunciado`, `Dificultad`, `Opcion1`, `Opcion2`, `Opcion3`, `Opcion4`, `Id_Seccion`, `ClaveUnica_Profesor`) ";
                    cmdInsert += "VALUES ('";
                    cmdInsert += ora;
                    cmdInsert += " ', ";
                    cmdInsert += dificultad;
                    cmdInsert += " , '";
                    cmdInsert += ia;
                    cmdInsert += " ', '";
                    cmdInsert += ib;
                    cmdInsert += " ', '";
                    cmdInsert += ic;
                    cmdInsert += " ', '";
                    cmdInsert += id;
                    cmdInsert += " ', ";
                    cmdInsert += seccion;
                    cmdInsert += " , 1);";

                    System.out.println(cmdInsert);
                    
                    // Imprimir el insert correspondiente
                    // INSERT INTO `examat`.`pregunta` (`Enunciado`, `Dificultad`, `Opcion1`, `Opcion2`, `Opcion3`, `Opcion4`, `Id_Seccion`, `ClaveUnica_Profesor`) 
                    // VALUES ('Enunciado', Dificultad, 'OPcion1', 'OPcion2', 'OPcion3', 'OPcion4', Id_seccion, CUProfe);

                }
                
                /*
                p = new Pregunta();
                
                //ponemos los campos
                
                em.getTransaction().begin();
                em.persist(p);
                em.getTransaction().commit();
                em.close();
                *
                */
                pp++;
            }
        }
        System.out.println("-- PREGUNTAS ENCONTRADAS: " + pp);
        // System.out.println("FIN DE EJECUCION");
    }
    
    private static String parsea(String s)
    {
        return s.trim()
                .replace("\r\n", " ")
                .replace("\\newline", "")
                .replace("\\qquad", "")
                .replace("\\'{a}",  "á")
                .replace("\\'{e}",  "é")
                .replace("\\'{\\i}","í")
                .replace("\\'{i}","í")
                .replace("\\'{o}",  "ó")
                .replace("\\'{u}",  "ú")
                .replace("\\medskip","")
                .replace("\\allowbreak","")
                .replace("\\bigskip","")
                .replace("\\mathstrut","")
                .replace("\\",  "\\\\");
    }
    
}
